﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Studio7i.Dominio;

namespace Studio7i.Persistencia.EF
{
    public class InstrumentoDAO : IInstrumentoDAO
    {
        public Instrumento Crear(Instrumento instrumentoACrear)
        {
            using (EFContext db = new EFContext(ConexionUtil.ObtenerCadena()))
            {
                int? codigo = db.Instrumentos.Select(l => (int?)l.Codigo).Max();
                instrumentoACrear.Codigo = (codigo ?? 0) + 1;
                db.Instrumentos.Add(instrumentoACrear);
                db.SaveChanges();
            }
            return Obtener(instrumentoACrear.Codigo);
        }
        public Instrumento Obtener(int codigo)
        {
            using (EFContext db = new EFContext(ConexionUtil.ObtenerCadena()))
            {
                var instrumento = from i in db.Instrumentos
                           where i.Codigo == codigo
                           select i;
                return instrumento.SingleOrDefault();
            }
        }
        public Instrumento Modificar(Instrumento instrumentoAModificar)
        {
            using (EFContext db = new EFContext(ConexionUtil.ObtenerCadena()))
            {
                Instrumento instrumentoExistente = db.Instrumentos.Single(i => i.Codigo == instrumentoAModificar.Codigo);
                instrumentoExistente.Tipo = instrumentoAModificar.Tipo;
                instrumentoExistente.Marca = instrumentoAModificar.Marca;
                instrumentoExistente.Modelo = instrumentoAModificar.Modelo;
                instrumentoExistente.AnhoFabricacion = instrumentoAModificar.AnhoFabricacion;
                instrumentoExistente.Caracteristicas = instrumentoAModificar.Caracteristicas;
                instrumentoExistente.CostoAlquiler = instrumentoAModificar.CostoAlquiler;
                db.SaveChanges();
                return instrumentoExistente;
            }
        }
        public void Eliminar(Instrumento instrumentoAEliminar)
        {
            using (EFContext db = new EFContext(ConexionUtil.ObtenerCadena()))
            {
                Instrumento instrumento = db.Instrumentos.Single(i => i.Codigo == instrumentoAEliminar.Codigo);
                db.Instrumentos.Remove(instrumento);
                db.SaveChanges();
            }
        }

        //
        public ICollection<Instrumento> ListarTodos()
        {
            using (EFContext db = new EFContext(ConexionUtil.ObtenerCadena()))
            {
                var resultado = from i in db.Instrumentos
                                select i;
                return resultado.ToList();
            }
        }
    }
}